/*
 * CNode.h
 *
 *  Created on: 1 oct. 2009
 *      Author: Jey
 */

#ifndef NODE_H
#define NODE_H
#include <vector>

// ------------------------------------------------------------------------ //
// Role de la classe Node:
// Contient les valeurs d'une case
// ------------------------------------------------------------------------ //

class Node
{
	public:

	// Constructeur & Destructeur

		Node();
		Node(int Value);
		~Node();

	// Methodes Publiques

		void InitValues(int NbValue);
		// Initialiser les valeurs possibles de la node

		bool IsFixed();
		// Tester si la valeur de la node est fixée (si 1 seule valeur possible)

		int GetValueCount();
		// Compter le nombre de valeur possible pour la node

		int GetValue(unsigned int Index);
		// Récupérer la valeur possible de la node située à index dans le vecteur

		int GetTempValue();
		// Récupérer la valeur affectée temporairement à la node

		void SetTempValue(int NbValue);
		// Modifier la valeur affectée temporairement à la node

		void SetTempValueFixed(bool Temp);
		// Modifier la valeur de TempValueFixed

		bool GetTempValueFixed();
		// Récupérer la valeur de TempValueFixed

		void RmValue(int Value);
		// Supprimer une valeur de la liste des valeur possible de la node

		void ResetTempValue();
		// Reinitialise la valeur temporaire d'une node

	// Attributs et méthodes privés
	private:

		std::vector<int> NodeValue;
		// Vecteur comptenant la liste des valeurs possibles de la node

		int NodeTempValue;
		// Valeur temporaire de la node

		bool TempValueFixed;
		// Valeur temporaire de la node fixée

		void AddValue(int Value);
		// Ajouter des valeurs possibles à la node
};
#endif
